// 书写路由映射表动态生成页面得菜单
// 菜单需要根据登录用户的权限数组中包含哪些菜单 ，就生成对应的菜单列表
import HomeView from '@/views/HomeView.vue'
import Login from '@/views/login/Login.vue'


// 在路由表里面可以增加元信息 ，将菜单相关信息配置在里面
// 接下来遍历路由表 通过权限去生成动态菜单 这样的话 渲染的时候 就可以自己通过菜单数据去渲染菜单了
// 按钮权限就是根据用户登录的角色
// 
let routes = [
    {
        path:'/',
        component:HomeView
      },
      {
        path:'/login',
        component:Login
        
      },
        //首页 
        // 路由允许使用meta属性，给每个路由映射地址中添加自定义的数据信息（元信息）
      {
        path:'/home',
        meta:{id:'1',title:'首页',path:'/'  ,icon: 'HomeFilled'},
        component:HomeView
      },
    //   轮播图管理
      {
        path:'/banner',
        component:HomeView,
        meta:{id:'2',title:'轮播图管理',path:'/banner',icon: 'Avatar'},
        children:[
            {
                path:'bannerlist',
                meta:{id:'2-1',title:'轮播图列表',path:'/banner/bannerlist'},
                component:()=>import('@/views/banner/BannerList.vue')

            },
            {
                path:'addbanner', 
                meta:{id:'2-2',title:'添加轮播图',path:'/banner/bannerlist'},
                component:()=>import('@/views/banner/AddBanner.vue')
            },
          
        ]
      },
    //   商品管理
      {
        path:'/goods',
        component:HomeView,
        meta:{id:'3',title:'产品管理',path:'/goods',icon: 'ShoppingBag'},
        children:[
            {
                path:'goodslist', 
                meta:{id:'3-1',title:'产品列表',path:'/goods/goodslist'},
                component:()=>import('@/views/goods/GoodsList.vue')
            },
            {
                path:'seckilllist', 
                meta:{id:'3-2',title:'秒杀列表',path:'/goods/seckilllist'},
                component:()=>import('@/views/goods/SeckillList.vue')
            },
            {
                path:'recommendlist', 
                meta:{id:'3-3',title:'推荐列表',path:'/goods/recommendlist'},
                component:()=>import('@/views/goods/RecommendList.vue')
            },
            { 
                path:'searchgoods', 
                meta:{id:'3-4',title:'筛选列表',path:'/goods/searchgoods'},
             component:()=>import('@/views/goods/SearchGoods.vue')
            },
        ]
      },
      {
        path:'/account',
        component:HomeView,
        meta:{id:'4',title:'账户管理',path:'/account',icon: 'location'},
        children:[
          {
            path:'accountlist', 
            meta:{id:'4-1',title:'管理员列表',path:'/account/accountlist'},
            component : ()=>import('@/views/account/AccountList.vue')
        },
        ]
      }
]
    //动态根据登录的用户的权限，配合路由映射表生成当前用户的菜单
    export const  getMenu = (checkedkeys,account)=>{
    // checkedkeys = ["1", "2", "2-1", "3", "3-1","3-2", "4-1", ];
     
      let menus = []
      // 这个时候遍历路由映射表
      routes.forEach((item)=>{
        if(account =='admin'&& item.meta){
          let fatherMenu = {};
          fatherMenu.title = item.meta.title;
          fatherMenu.icon = item.meta.icon;
          fatherMenu.path = item.meta.path;
          menus.push(fatherMenu);
          if (item.children) {
            fatherMenu.children = [];
            item.children.forEach((child) => {
              let subMenu = {};
              subMenu.title = child.meta.title;
              subMenu.path = child.meta.path;
              // subMenu.icon = child.meta.icon;
              fatherMenu.children.push(subMenu);
            });
          }
        }else{
   // console.log(item);
        // 先判断这个item里面有没有meta 有就是有权限的
        if(item.meta){
          // 定义一个变量 作为一个标记 如果判断成立就在二级菜单那把flag改为true 说明二级菜单一定在用户的权限面 或者flag为true  就一定要加一级菜单
          let flag = false;
     
          // 判断有没有二级路由之前 在这里先定义一个父级菜单
          let fatherMenu = {}
          // 有meta 还要判断meta中的id在不在权限数组中
          // 使用includes来判断
         
          // 这里需要判断有没有二级菜单 如果里面有children 就代表有二级菜单 
          // 二级路由中可能包含好几个 所以要定义一个数组
          if(item.children){
            // 有二级的话在father里面
            // children里面可能有好几个菜单，所以是个数组
            fatherMenu.children = []
            item.children.forEach((child)=>{
              if(checkedkeys.includes(child.meta.id)){
                flag = true;
                let subMenu = {}
                subMenu.title = child.meta.title
                subMenu.path = child.meta.path
                fatherMenu.children.push(subMenu) 
              }
            })
          }
           // 这里只能结构出来一级菜单
           if(checkedkeys.includes(item.meta.id) || flag){
            // 这里如果是先判断一级菜单 一级菜单没有在里面 
           //  但是二级菜单在里面 就还要添加一级菜单 就需要改个顺序
           // 所以上来之后先判断二级菜单
           //------------------------------------- 
             // 这里面就生成了一个菜单 放在menus中
             fatherMenu.title=item.meta.title,
             fatherMenu.path=item.meta.path,
             fatherMenu.icon = item.meta.icon
             menus.push(fatherMenu)
           }
        }
        }
     
      })
      console.log(menus);
      return menus
    }
export default routes;